package thread;

/**
 * 静态方法上如果使用synchronized修饰，那么该方法一定同步
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        new Thread(()->Foo.dosome(),"t1").start();
        new Thread(()->Foo.dosome(),"t2").start();
    }
}
class Foo{
    /**
     * 静态方法上的同步监视器对象依然不可选，
     * 指定的就是当前类的类对象
     * 即Class的实例
     * JVM在加载一个类时会同时生成一个Class的实例与之对应，每个被JVM加载的类
     * 都有且只有一个Class的实例，这个实例为该类的类对象，
     * 写法为 类名.class
     */
//    public synchronized static void dosome(){
        public static void dosome() {
            synchronized (Foo.class) {
                Thread t = Thread.currentThread();
                System.out.println(t.getName() + ":正在执行dosome方法。。。");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(t.getName() + ":执行dosome方法完毕");
                ;
            }
        }
}